/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.eurotrader.validadores;

import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;




/**
 *
 * @author Usuário
 */
public class ValidarCpf implements Validator {


    public void validate(FacesContext context, UIComponent validate, Object valorTela) throws ValidatorException {

    String cpf = (String) valorTela;
    String cpfSemMaskara;
    cpfSemMaskara =  cpf.replace(".", "").replace("/", "").replace("-", "");

     if (!validaCPF(String.valueOf(cpfSemMaskara))) {

            ((UIInput)validate).setValid(false);
            FacesMessage msg = new FacesMessage("CPF Invalido");
            context.addMessage(validate.getClientId(context), msg);

         }
    
    
    }

    private static boolean validaCPF(String cpf) {
	          if (cpf == null || cpf.length() != 11 || isCPFPadrao(cpf))
	               return false;
	 
	          try {
	               Long.parseLong(cpf);
	          } catch (NumberFormatException e) { // CPF não possui somente números
	           return false;
	          }
	 
	      if (!calcDigVerif(cpf.substring(0, 9)).equals(cpf.substring(9, 11)))
	               return false;
	 
	          return true;
	     }
    
     private static boolean isCPFPadrao(String cpf) {
         if (cpf.equals("11111111111") || cpf.equals("22222222222")
	        || cpf.equals("33333333333")
	        || cpf.equals("44444444444")
	        || cpf.equals("55555555555")
	        || cpf.equals("66666666666")
	        || cpf.equals("77777777777")
	        || cpf.equals("88888888888")
	        || cpf.equals("99999999999")) {	 
	               return true;
	          }	 
	      return false;
	     }

     private static String calcDigVerif(String num) {
	          Integer primDig, segDig;
	      int soma = 0, peso = 10;
	      for (int i = 0; i < num.length(); i++)
	           soma += Integer.parseInt(num.substring(i, i + 1)) * peso--;

	      if (soma % 11 == 0 | soma % 11 == 1)
	           primDig = new Integer(0);
	          else
	               primDig = new Integer(11 - (soma % 11));

	      soma = 0;
	          peso = 11;
	          for (int i = 0; i < num.length(); i++)
	               soma += Integer.parseInt(num.substring(i, i + 1)) * peso--;

	          soma += primDig.intValue() * 2;
	          if (soma % 11 == 0 | soma % 11 == 1)
	               segDig = new Integer(0);
	          else
	               segDig = new Integer(11 - (soma % 11));

	          return primDig.toString() + segDig.toString();
	     }





//        System.out.println("CPF ...."+cpfSemMaskara);
//
//        if(cpfSemMaskara == null || cpfSemMaskara.length() != 11){
//            ((UIInput)validate).setValid(false);
//            FacesMessage msg = new FacesMessage("CPF Invalido");
//            context.addMessage(validate.getClientId(context), msg);
//         }else{
//          try {
//               Long.parseLong(cpfSemMaskara);
//          } catch (NumberFormatException e) { // CPF não possui somente números
//               ((UIInput)validate).setValid(false);
//            FacesMessage msg = new FacesMessage("CPF Invalido");
//            context.addMessage(validate.getClientId(context), msg);
//          }
//
/////////////////////
//          if (cpfSemMaskara.equals("11111111111") || cpfSemMaskara.equals("22222222222")
//	        || cpfSemMaskara.equals("33333333333")
//	        || cpfSemMaskara.equals("44444444444")
//	        || cpfSemMaskara.equals("55555555555")
//	        || cpfSemMaskara.equals("66666666666")
//	        || cpfSemMaskara.equals("77777777777")
//	        || cpfSemMaskara.equals("88888888888")
//	        || cpfSemMaskara.equals("99999999999")) {
//
//                 ((UIInput)validate).setValid(false);
//                 FacesMessage msg = new FacesMessage("CPF Invalido");
//                 context.addMessage(validate.getClientId(context), msg);
//
//	          }
//
//
//          String num = cpfSemMaskara;
//	      Integer primDig, segDig;
//	      int soma = 0, peso = 10;
//	      for (int i = 0; i < num.length(); i++)
//	           soma += Integer.parseInt(num.substring(i, i + 1)) * peso--;
//
//	      if (soma % 11 == 0 | soma % 11 == 1){
//	           primDig = new Integer(0);
//          }else{
//	               primDig = new Integer(11 - (soma % 11));
//          }
//	      soma = 0;
//	          peso = 11;
//	          for (int i = 0; i < num.length(); i++)
//	               soma += Integer.parseInt(num.substring(i, i + 1)) * peso--;
//
//	          soma += primDig.intValue() * 2;
//	          if (soma % 11 == 0 | soma % 11 == 1)
//	               segDig = new Integer(0);
//	          else
//	               segDig = new Integer(11 - (soma % 11));
//
//	         num = primDig.toString() + segDig.toString();
//
//
//      }
//
//    }


   





}
